package com.cictec.middleware.tde.rm.protocol.rm.encode;

import java.nio.ByteBuffer;

import com.cictec.middleware.commons.utils.BinaryUtils;
import com.cictec.middleware.tde.exception.MessageEncoderException;
import com.cictec.middleware.tde.rm.protocol.AbstractMessageEncoder;
import com.cictec.middleware.tde.rm.protocol.TerminalMessage;
import com.cictec.middleware.tde.rm.protocol.annotion.TerminalMessageEncoder;
import com.cictec.middleware.tde.rm.protocol.rm.message.Rm0x01TerminalMessage;
import com.cictec.middleware.tde.rm.protocol.rm.utils.RmBinaryUtils;


/**
 *   0x01  连接请求
 *
 */
@TerminalMessageEncoder(0x01)
public class Rm0x01Encoder extends AbstractMessageEncoder{

	
	@Override
	public byte[] encode(TerminalMessage message) throws MessageEncoderException {
		Rm0x01TerminalMessage msg = (Rm0x01TerminalMessage)message;
		
		
		ByteBuffer out = ByteBuffer.allocate(256);
		RmBinaryUtils.dateToDwordRM(msg.getCreateTime(), out);			// 产生时间 			HEX 4 字节
		
		byte [] ss = new byte[10];
		byte [] bnumber = BinaryUtils.stringToBytes(msg.getSerialNumber());	// 终端出厂序列号 	HEX 10 字节
		if(bnumber.length < 10){
			for (int i = 0; i < bnumber.length; i++) {
				ss[i] = bnumber[i];
			}
		}
		out.put(ss);
		BinaryUtils.intToUnsignedByte(msg.getLastCloseReason(), out);	// 上次断开原因 		HEX 1 字节
		BinaryUtils.stringToBytes(msg.getSim(), out);		 			// SIM 卡号 HEX 8 字节 SIM 卡序列号
		out.put(BinaryUtils.longToDword(msg.getDriverId()));			// 驾驶员 ID HEX 4 字节
		BinaryUtils.intToWord(msg.getRestartTimes(),out);				// 当天电源重启次数 HEX 2 字节 超出时用全 0xFF 表示
		BinaryUtils.intToWord(msg.getNetConnectTimes(),out);			// 网络连接次数 HEX 2 字节 本次电源开启后网络连接次数，电源重启后清 0，超出时用全 0xFF 表示
		BinaryUtils.intToWord(msg.getReserved(),out);					// 预留 HEX 2 字节
		return toBytes(out);
	}


}
